
package com.atguigu.gulimall.prodect.exception;

import com.atguigu.common.exception.BizCodeEnum;
import com.atguigu.common.utils.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author: zhaocun
 * @Date: 2023/11/23/11:25
 * @Description:
 */

@Slf4j
@RestControllerAdvice
public class GliMallExecption {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public R handleValidationExceptions(MethodArgumentNotValidException ex){
        // 从异常中获取校验结果对象
        BindingResult result = ex.getBindingResult();
        // 创建一个 Map 用于存储字段名和对应的错误信息
        Map<String, String> errors = new HashMap<>();
        // 遍历校验结果中的错误信息
        result.getFieldErrors().forEach((error) -> {
            // 获取字段名
            String fieldName = error.getField();

            // 获取错误信息
            String errorMessage = error.getDefaultMessage();

            // 将字段名和错误信息添加到 Map 中
            errors.put(fieldName, errorMessage);
        });
        // 返回自定义的错误响应，包含 HTTP 状态码、错误消息以及错误详情
        return R.error(BizCodeEnum.VALID_EXCEPTION.getCode(),BizCodeEnum.VALID_EXCEPTION.getMsg()).put("data",errors);
    }

    @ExceptionHandler(value = Throwable.class)
    public R handleException(Throwable e){
        log.error("错误：",e);
        return R.error(BizCodeEnum.UNKNOWN_EXCEPTION.getCode(),BizCodeEnum.UNKNOWN_EXCEPTION.getMsg());
    }
}

